{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "pdf-title"
    ]
   },
   "source": [
    "# Softmax exercise\n",
    "\n",
    "*Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the [assignments page](http://vision.stanford.edu/teaching/cs231n/assignments.html) on the course website.*\n",
    "\n",
    "This exercise is analogous to the SVM exercise. You will:\n",
    "\n",
    "- implement a fully-vectorized **loss function** for the Softmax classifier\n",
    "- implement the fully-vectorized expression for its **analytic gradient**\n",
    "- **check your implementation** with numerical gradient\n",
    "- use a validation set to **tune the learning rate and regularization** strength\n",
    "- **optimize** the loss function with **SGD**\n",
    "- **visualize** the final learned weights\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": [
     "pdf-ignore"
    ]
   },
   "outputs": [],
   "source": [
    "import random\n",
    "import numpy as np\n",
    "from cs231n.data_utils import load_CIFAR10\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "# for auto-reloading extenrnal modules\n",
    "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "tags": [
     "pdf-ignore"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train data shape:  (49000, 3073)\n",
      "Train labels shape:  (49000,)\n",
      "Validation data shape:  (1000, 3073)\n",
      "Validation labels shape:  (1000,)\n",
      "Test data shape:  (1000, 3073)\n",
      "Test labels shape:  (1000,)\n",
      "dev data shape:  (500, 3073)\n",
      "dev labels shape:  (500,)\n"
     ]
    }
   ],
   "source": [
    "def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000, num_dev=500):\n",
    "    \"\"\"\n",
    "    Load the CIFAR-10 dataset from disk and perform preprocessing to prepare\n",
    "    it for the linear classifier. These are the same steps as we used for the\n",
    "    SVM, but condensed to a single function.  \n",
    "    \"\"\"\n",
    "    # Load the raw CIFAR-10 data\n",
    "    cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n",
    "    \n",
    "    # Cleaning up variables to prevent loading data multiple times (which may cause memory issue)\n",
    "    try:\n",
    "       del X_train, y_train\n",
    "       del X_test, y_test\n",
    "       print('Clear previously loaded data.')\n",
    "    except:\n",
    "       pass\n",
    "\n",
    "    X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n",
    "    \n",
    "    # subsample the data\n",
    "    mask = list(range(num_training, num_training + num_validation))\n",
    "    X_val = X_train[mask]\n",
    "    y_val = y_train[mask]\n",
    "    mask = list(range(num_training))\n",
    "    X_train = X_train[mask]\n",
    "    y_train = y_train[mask]\n",
    "    mask = list(range(num_test))\n",
    "    X_test = X_test[mask]\n",
    "    y_test = y_test[mask]\n",
    "    mask = np.random.choice(num_training, num_dev, replace=False)\n",
    "    X_dev = X_train[mask]\n",
    "    y_dev = y_train[mask]\n",
    "    \n",
    "    # Preprocessing: reshape the image data into rows\n",
    "    X_train = np.reshape(X_train, (X_train.shape[0], -1))\n",
    "    X_val = np.reshape(X_val, (X_val.shape[0], -1))\n",
    "    X_test = np.reshape(X_test, (X_test.shape[0], -1))\n",
    "    X_dev = np.reshape(X_dev, (X_dev.shape[0], -1))\n",
    "    \n",
    "    # Normalize the data: subtract the mean image\n",
    "    mean_image = np.mean(X_train, axis = 0)\n",
    "    X_train -= mean_image\n",
    "    X_val -= mean_image\n",
    "    X_test -= mean_image\n",
    "    X_dev -= mean_image\n",
    "    \n",
    "    # add bias dimension and transform into columns\n",
    "    X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))])\n",
    "    X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))])\n",
    "    X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))])\n",
    "    X_dev = np.hstack([X_dev, np.ones((X_dev.shape[0], 1))])\n",
    "    \n",
    "    return X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev\n",
    "\n",
    "\n",
    "# Invoke the above function to get our data.\n",
    "X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev = get_CIFAR10_data()\n",
    "print('Train data shape: ', X_train.shape)\n",
    "print('Train labels shape: ', y_train.shape)\n",
    "print('Validation data shape: ', X_val.shape)\n",
    "print('Validation labels shape: ', y_val.shape)\n",
    "print('Test data shape: ', X_test.shape)\n",
    "print('Test labels shape: ', y_test.shape)\n",
    "print('dev data shape: ', X_dev.shape)\n",
    "print('dev labels shape: ', y_dev.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Softmax Classifier\n",
    "\n",
    "Your code for this section will all be written inside `cs231n/classifiers/softmax.py`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss: 2.333043\n",
      "sanity check: 2.302585\n"
     ]
    }
   ],
   "source": [
    "# First implement the naive softmax loss function with nested loops.\n",
    "# Open the file cs231n/classifiers/softmax.py and implement the\n",
    "# softmax_loss_naive function.\n",
    "\n",
    "from cs231n.classifiers.softmax import softmax_loss_naive\n",
    "import time\n",
    "\n",
    "# Generate a random softmax weight matrix and use it to compute the loss.\n",
    "W = np.random.randn(3073, 10) * 0.0001\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n",
    "\n",
    "# As a rough sanity check, our loss should be something close to -log(0.1).\n",
    "print('loss: %f' % loss)\n",
    "print('sanity check: %f' % (-np.log(0.1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "pdf-inline"
    ]
   },
   "source": [
    "**Inline Question 1**\n",
    "\n",
    "Why do we expect our loss to be close to -log(0.1)? Explain briefly.**\n",
    "\n",
    "$\\color{blue}{\\textit Your Answer:}$ *Fill this in* \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numerical: 0.341070 analytic: 0.341070, relative error: 1.422222e-07\n",
      "numerical: -2.004714 analytic: -2.004714, relative error: 4.666172e-09\n",
      "numerical: -0.533054 analytic: -0.533054, relative error: 7.178642e-08\n",
      "numerical: -2.061584 analytic: -2.061584, relative error: 1.491226e-08\n",
      "numerical: -0.877673 analytic: -0.877673, relative error: 3.621173e-09\n",
      "numerical: -0.623638 analytic: -0.623638, relative error: 2.951715e-08\n",
      "numerical: -2.428336 analytic: -2.428336, relative error: 2.437650e-09\n",
      "numerical: -1.053936 analytic: -1.053936, relative error: 8.403369e-09\n",
      "numerical: -0.463640 analytic: -0.463640, relative error: 5.947753e-08\n",
      "numerical: -0.551094 analytic: -0.551094, relative error: 8.586237e-08\n",
      "numerical: 1.277870 analytic: 1.280995, relative error: 1.221180e-03\n",
      "numerical: -0.400635 analytic: -0.397489, relative error: 3.940983e-03\n",
      "numerical: 1.715779 analytic: 1.718901, relative error: 9.089621e-04\n",
      "numerical: -0.034840 analytic: -0.031722, relative error: 4.684160e-02\n",
      "numerical: -0.098697 analytic: -0.095542, relative error: 1.624401e-02\n",
      "numerical: -0.646838 analytic: -0.643697, relative error: 2.434129e-03\n",
      "numerical: -0.978930 analytic: -0.975809, relative error: 1.596480e-03\n",
      "numerical: 2.717020 analytic: 2.720119, relative error: 5.697871e-04\n",
      "numerical: 2.205513 analytic: 2.208668, relative error: 7.149090e-04\n",
      "numerical: 2.412242 analytic: 2.415407, relative error: 6.554092e-04\n"
     ]
    }
   ],
   "source": [
    "# Complete the implementation of softmax_loss_naive and implement a (naive)\n",
    "# version of the gradient that uses nested loops.\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n",
    "\n",
    "# As we did for the SVM, use numeric gradient checking as a debugging tool.\n",
    "# The numeric gradient should be close to the analytic gradient.\n",
    "from cs231n.gradient_check import grad_check_sparse\n",
    "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 0.0)[0]\n",
    "grad_numerical = grad_check_sparse(f, W, grad, 10)\n",
    "\n",
    "# similar to SVM case, do another gradient check with regularization\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 5e1)\n",
    "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 5e1)[0]\n",
    "grad_numerical = grad_check_sparse(f, W, grad, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "naive loss: 2.333043e+00 computed in 0.070812s\n",
      "vectorized loss: 2.333043e+00 computed in 0.003995s\n",
      "Loss difference: 0.000000\n",
      "Gradient difference: 0.000000\n"
     ]
    }
   ],
   "source": [
    "# Now that we have a naive implementation of the softmax loss function and its gradient,\n",
    "# implement a vectorized version in softmax_loss_vectorized.\n",
    "# The two versions should compute the same results, but the vectorized version should be\n",
    "# much faster.\n",
    "tic = time.time()\n",
    "loss_naive, grad_naive = softmax_loss_naive(W, X_dev, y_dev, 0.000005)\n",
    "toc = time.time()\n",
    "print('naive loss: %e computed in %fs' % (loss_naive, toc - tic))\n",
    "\n",
    "from cs231n.classifiers.softmax import softmax_loss_vectorized\n",
    "tic = time.time()\n",
    "loss_vectorized, grad_vectorized = softmax_loss_vectorized(W, X_dev, y_dev, 0.000005)\n",
    "toc = time.time()\n",
    "print('vectorized loss: %e computed in %fs' % (loss_vectorized, toc - tic))\n",
    "\n",
    "# As we did for the SVM, we use the Frobenius norm to compare the two versions\n",
    "# of the gradient.\n",
    "grad_difference = np.linalg.norm(grad_naive - grad_vectorized, ord='fro')\n",
    "print('Loss difference: %f' % np.abs(loss_naive - loss_vectorized))\n",
    "print('Gradient difference: %f' % grad_difference)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "id": "tuning",
    "tags": [
     "code"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lr 1.000000e-07 reg 2.500000e+04 train accuracy: 0.262224 val accuracy: 0.249000\n",
      "lr 1.000000e-07 reg 2.631579e+04 train accuracy: 0.254490 val accuracy: 0.258000\n",
      "lr 1.000000e-07 reg 2.763158e+04 train accuracy: 0.263592 val accuracy: 0.270000\n",
      "lr 1.000000e-07 reg 2.894737e+04 train accuracy: 0.262857 val accuracy: 0.296000\n",
      "lr 1.000000e-07 reg 3.026316e+04 train accuracy: 0.261367 val accuracy: 0.274000\n",
      "lr 1.000000e-07 reg 3.157895e+04 train accuracy: 0.261041 val accuracy: 0.262000\n",
      "lr 1.000000e-07 reg 3.289474e+04 train accuracy: 0.262755 val accuracy: 0.279000\n",
      "lr 1.000000e-07 reg 3.421053e+04 train accuracy: 0.260694 val accuracy: 0.255000\n",
      "lr 1.000000e-07 reg 3.552632e+04 train accuracy: 0.266673 val accuracy: 0.249000\n",
      "lr 1.000000e-07 reg 3.684211e+04 train accuracy: 0.263469 val accuracy: 0.280000\n",
      "lr 1.000000e-07 reg 3.815789e+04 train accuracy: 0.264367 val accuracy: 0.250000\n",
      "lr 1.000000e-07 reg 3.947368e+04 train accuracy: 0.258041 val accuracy: 0.263000\n",
      "lr 1.000000e-07 reg 4.078947e+04 train accuracy: 0.255776 val accuracy: 0.244000\n",
      "lr 1.000000e-07 reg 4.210526e+04 train accuracy: 0.259082 val accuracy: 0.260000\n",
      "lr 1.000000e-07 reg 4.342105e+04 train accuracy: 0.260490 val accuracy: 0.265000\n",
      "lr 1.000000e-07 reg 4.473684e+04 train accuracy: 0.271224 val accuracy: 0.264000\n",
      "lr 1.000000e-07 reg 4.605263e+04 train accuracy: 0.266245 val accuracy: 0.265000\n",
      "lr 1.000000e-07 reg 4.736842e+04 train accuracy: 0.256429 val accuracy: 0.277000\n",
      "lr 1.000000e-07 reg 4.868421e+04 train accuracy: 0.256755 val accuracy: 0.263000\n",
      "lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.255571 val accuracy: 0.259000\n",
      "lr 1.210526e-07 reg 2.500000e+04 train accuracy: 0.272245 val accuracy: 0.268000\n",
      "lr 1.210526e-07 reg 2.631579e+04 train accuracy: 0.269143 val accuracy: 0.269000\n",
      "lr 1.210526e-07 reg 2.763158e+04 train accuracy: 0.266306 val accuracy: 0.301000\n",
      "lr 1.210526e-07 reg 2.894737e+04 train accuracy: 0.270837 val accuracy: 0.272000\n",
      "lr 1.210526e-07 reg 3.026316e+04 train accuracy: 0.273490 val accuracy: 0.290000\n",
      "lr 1.210526e-07 reg 3.157895e+04 train accuracy: 0.265776 val accuracy: 0.269000\n",
      "lr 1.210526e-07 reg 3.289474e+04 train accuracy: 0.270000 val accuracy: 0.268000\n",
      "lr 1.210526e-07 reg 3.421053e+04 train accuracy: 0.269020 val accuracy: 0.281000\n",
      "lr 1.210526e-07 reg 3.552632e+04 train accuracy: 0.268082 val accuracy: 0.270000\n",
      "lr 1.210526e-07 reg 3.684211e+04 train accuracy: 0.268041 val accuracy: 0.248000\n",
      "lr 1.210526e-07 reg 3.815789e+04 train accuracy: 0.268000 val accuracy: 0.291000\n",
      "lr 1.210526e-07 reg 3.947368e+04 train accuracy: 0.268673 val accuracy: 0.294000\n",
      "lr 1.210526e-07 reg 4.078947e+04 train accuracy: 0.266918 val accuracy: 0.272000\n",
      "lr 1.210526e-07 reg 4.210526e+04 train accuracy: 0.269347 val accuracy: 0.299000\n",
      "lr 1.210526e-07 reg 4.342105e+04 train accuracy: 0.266245 val accuracy: 0.280000\n",
      "lr 1.210526e-07 reg 4.473684e+04 train accuracy: 0.266306 val accuracy: 0.251000\n",
      "lr 1.210526e-07 reg 4.605263e+04 train accuracy: 0.264469 val accuracy: 0.259000\n",
      "lr 1.210526e-07 reg 4.736842e+04 train accuracy: 0.264551 val accuracy: 0.303000\n",
      "lr 1.210526e-07 reg 4.868421e+04 train accuracy: 0.266204 val accuracy: 0.263000\n",
      "lr 1.210526e-07 reg 5.000000e+04 train accuracy: 0.271163 val accuracy: 0.272000\n",
      "lr 1.421053e-07 reg 2.500000e+04 train accuracy: 0.275939 val accuracy: 0.277000\n",
      "lr 1.421053e-07 reg 2.631579e+04 train accuracy: 0.273245 val accuracy: 0.286000\n",
      "lr 1.421053e-07 reg 2.763158e+04 train accuracy: 0.274224 val accuracy: 0.285000\n",
      "lr 1.421053e-07 reg 2.894737e+04 train accuracy: 0.280918 val accuracy: 0.308000\n",
      "lr 1.421053e-07 reg 3.026316e+04 train accuracy: 0.282184 val accuracy: 0.267000\n",
      "lr 1.421053e-07 reg 3.157895e+04 train accuracy: 0.272469 val accuracy: 0.291000\n",
      "lr 1.421053e-07 reg 3.289474e+04 train accuracy: 0.272122 val accuracy: 0.283000\n",
      "lr 1.421053e-07 reg 3.421053e+04 train accuracy: 0.271184 val accuracy: 0.298000\n",
      "lr 1.421053e-07 reg 3.552632e+04 train accuracy: 0.279592 val accuracy: 0.260000\n",
      "lr 1.421053e-07 reg 3.684211e+04 train accuracy: 0.280429 val accuracy: 0.268000\n",
      "lr 1.421053e-07 reg 3.815789e+04 train accuracy: 0.281694 val accuracy: 0.272000\n",
      "lr 1.421053e-07 reg 3.947368e+04 train accuracy: 0.270918 val accuracy: 0.291000\n",
      "lr 1.421053e-07 reg 4.078947e+04 train accuracy: 0.280388 val accuracy: 0.286000\n",
      "lr 1.421053e-07 reg 4.210526e+04 train accuracy: 0.276816 val accuracy: 0.272000\n",
      "lr 1.421053e-07 reg 4.342105e+04 train accuracy: 0.273082 val accuracy: 0.274000\n",
      "lr 1.421053e-07 reg 4.473684e+04 train accuracy: 0.268857 val accuracy: 0.262000\n",
      "lr 1.421053e-07 reg 4.605263e+04 train accuracy: 0.277694 val accuracy: 0.283000\n",
      "lr 1.421053e-07 reg 4.736842e+04 train accuracy: 0.275041 val accuracy: 0.273000\n",
      "lr 1.421053e-07 reg 4.868421e+04 train accuracy: 0.271837 val accuracy: 0.292000\n",
      "lr 1.421053e-07 reg 5.000000e+04 train accuracy: 0.277531 val accuracy: 0.267000\n",
      "lr 1.631579e-07 reg 2.500000e+04 train accuracy: 0.276571 val accuracy: 0.281000\n",
      "lr 1.631579e-07 reg 2.631579e+04 train accuracy: 0.288122 val accuracy: 0.300000\n",
      "lr 1.631579e-07 reg 2.763158e+04 train accuracy: 0.279143 val accuracy: 0.281000\n",
      "lr 1.631579e-07 reg 2.894737e+04 train accuracy: 0.278429 val accuracy: 0.280000\n",
      "lr 1.631579e-07 reg 3.026316e+04 train accuracy: 0.283388 val accuracy: 0.284000\n",
      "lr 1.631579e-07 reg 3.157895e+04 train accuracy: 0.275755 val accuracy: 0.283000\n",
      "lr 1.631579e-07 reg 3.289474e+04 train accuracy: 0.284878 val accuracy: 0.291000\n",
      "lr 1.631579e-07 reg 3.421053e+04 train accuracy: 0.277939 val accuracy: 0.287000\n",
      "lr 1.631579e-07 reg 3.552632e+04 train accuracy: 0.285612 val accuracy: 0.281000\n",
      "lr 1.631579e-07 reg 3.684211e+04 train accuracy: 0.276429 val accuracy: 0.272000\n",
      "lr 1.631579e-07 reg 3.815789e+04 train accuracy: 0.286306 val accuracy: 0.301000\n",
      "lr 1.631579e-07 reg 3.947368e+04 train accuracy: 0.283122 val accuracy: 0.290000\n",
      "lr 1.631579e-07 reg 4.078947e+04 train accuracy: 0.286102 val accuracy: 0.290000\n",
      "lr 1.631579e-07 reg 4.210526e+04 train accuracy: 0.282224 val accuracy: 0.285000\n",
      "lr 1.631579e-07 reg 4.342105e+04 train accuracy: 0.281143 val accuracy: 0.290000\n",
      "lr 1.631579e-07 reg 4.473684e+04 train accuracy: 0.280449 val accuracy: 0.260000\n",
      "lr 1.631579e-07 reg 4.605263e+04 train accuracy: 0.281673 val accuracy: 0.296000\n",
      "lr 1.631579e-07 reg 4.736842e+04 train accuracy: 0.276184 val accuracy: 0.295000\n",
      "lr 1.631579e-07 reg 4.868421e+04 train accuracy: 0.281408 val accuracy: 0.288000\n",
      "lr 1.631579e-07 reg 5.000000e+04 train accuracy: 0.280939 val accuracy: 0.277000\n",
      "lr 1.842105e-07 reg 2.500000e+04 train accuracy: 0.286347 val accuracy: 0.276000\n",
      "lr 1.842105e-07 reg 2.631579e+04 train accuracy: 0.283122 val accuracy: 0.288000\n",
      "lr 1.842105e-07 reg 2.763158e+04 train accuracy: 0.284551 val accuracy: 0.283000\n",
      "lr 1.842105e-07 reg 2.894737e+04 train accuracy: 0.291347 val accuracy: 0.303000\n",
      "lr 1.842105e-07 reg 3.026316e+04 train accuracy: 0.282204 val accuracy: 0.288000\n",
      "lr 1.842105e-07 reg 3.157895e+04 train accuracy: 0.286347 val accuracy: 0.282000\n",
      "lr 1.842105e-07 reg 3.289474e+04 train accuracy: 0.293490 val accuracy: 0.283000\n",
      "lr 1.842105e-07 reg 3.421053e+04 train accuracy: 0.284918 val accuracy: 0.303000\n",
      "lr 1.842105e-07 reg 3.552632e+04 train accuracy: 0.292184 val accuracy: 0.304000\n",
      "lr 1.842105e-07 reg 3.684211e+04 train accuracy: 0.285347 val accuracy: 0.276000\n",
      "lr 1.842105e-07 reg 3.815789e+04 train accuracy: 0.288143 val accuracy: 0.310000\n",
      "lr 1.842105e-07 reg 3.947368e+04 train accuracy: 0.289388 val accuracy: 0.290000\n",
      "lr 1.842105e-07 reg 4.078947e+04 train accuracy: 0.288041 val accuracy: 0.280000\n",
      "lr 1.842105e-07 reg 4.210526e+04 train accuracy: 0.280571 val accuracy: 0.283000\n",
      "lr 1.842105e-07 reg 4.342105e+04 train accuracy: 0.285449 val accuracy: 0.285000\n",
      "lr 1.842105e-07 reg 4.473684e+04 train accuracy: 0.287122 val accuracy: 0.274000\n",
      "lr 1.842105e-07 reg 4.605263e+04 train accuracy: 0.288959 val accuracy: 0.276000\n",
      "lr 1.842105e-07 reg 4.736842e+04 train accuracy: 0.286061 val accuracy: 0.283000\n",
      "lr 1.842105e-07 reg 4.868421e+04 train accuracy: 0.293143 val accuracy: 0.269000\n",
      "lr 1.842105e-07 reg 5.000000e+04 train accuracy: 0.283959 val accuracy: 0.279000\n",
      "lr 2.052632e-07 reg 2.500000e+04 train accuracy: 0.290388 val accuracy: 0.283000\n",
      "lr 2.052632e-07 reg 2.631579e+04 train accuracy: 0.289020 val accuracy: 0.301000\n",
      "lr 2.052632e-07 reg 2.763158e+04 train accuracy: 0.290878 val accuracy: 0.288000\n",
      "lr 2.052632e-07 reg 2.894737e+04 train accuracy: 0.294306 val accuracy: 0.288000\n",
      "lr 2.052632e-07 reg 3.026316e+04 train accuracy: 0.283265 val accuracy: 0.304000\n",
      "lr 2.052632e-07 reg 3.157895e+04 train accuracy: 0.291102 val accuracy: 0.287000\n",
      "lr 2.052632e-07 reg 3.289474e+04 train accuracy: 0.291388 val accuracy: 0.286000\n",
      "lr 2.052632e-07 reg 3.421053e+04 train accuracy: 0.286878 val accuracy: 0.274000\n",
      "lr 2.052632e-07 reg 3.552632e+04 train accuracy: 0.289714 val accuracy: 0.306000\n",
      "lr 2.052632e-07 reg 3.684211e+04 train accuracy: 0.293020 val accuracy: 0.302000\n",
      "lr 2.052632e-07 reg 3.815789e+04 train accuracy: 0.287000 val accuracy: 0.284000\n",
      "lr 2.052632e-07 reg 3.947368e+04 train accuracy: 0.293286 val accuracy: 0.294000\n",
      "lr 2.052632e-07 reg 4.078947e+04 train accuracy: 0.295592 val accuracy: 0.299000\n",
      "lr 2.052632e-07 reg 4.210526e+04 train accuracy: 0.292449 val accuracy: 0.305000\n",
      "lr 2.052632e-07 reg 4.342105e+04 train accuracy: 0.291571 val accuracy: 0.277000\n",
      "lr 2.052632e-07 reg 4.473684e+04 train accuracy: 0.292918 val accuracy: 0.286000\n",
      "lr 2.052632e-07 reg 4.605263e+04 train accuracy: 0.294898 val accuracy: 0.308000\n",
      "lr 2.052632e-07 reg 4.736842e+04 train accuracy: 0.288939 val accuracy: 0.301000\n",
      "lr 2.052632e-07 reg 4.868421e+04 train accuracy: 0.287980 val accuracy: 0.277000\n",
      "lr 2.052632e-07 reg 5.000000e+04 train accuracy: 0.296469 val accuracy: 0.294000\n",
      "lr 2.263158e-07 reg 2.500000e+04 train accuracy: 0.291653 val accuracy: 0.288000\n",
      "lr 2.263158e-07 reg 2.631579e+04 train accuracy: 0.299449 val accuracy: 0.298000\n",
      "lr 2.263158e-07 reg 2.763158e+04 train accuracy: 0.298041 val accuracy: 0.292000\n",
      "lr 2.263158e-07 reg 2.894737e+04 train accuracy: 0.302878 val accuracy: 0.283000\n",
      "lr 2.263158e-07 reg 3.026316e+04 train accuracy: 0.298265 val accuracy: 0.295000\n",
      "lr 2.263158e-07 reg 3.157895e+04 train accuracy: 0.299204 val accuracy: 0.317000\n",
      "lr 2.263158e-07 reg 3.289474e+04 train accuracy: 0.288714 val accuracy: 0.311000\n",
      "lr 2.263158e-07 reg 3.421053e+04 train accuracy: 0.294408 val accuracy: 0.293000\n",
      "lr 2.263158e-07 reg 3.552632e+04 train accuracy: 0.292531 val accuracy: 0.284000\n",
      "lr 2.263158e-07 reg 3.684211e+04 train accuracy: 0.296694 val accuracy: 0.301000\n",
      "lr 2.263158e-07 reg 3.815789e+04 train accuracy: 0.297776 val accuracy: 0.314000\n",
      "lr 2.263158e-07 reg 3.947368e+04 train accuracy: 0.299714 val accuracy: 0.292000\n",
      "lr 2.263158e-07 reg 4.078947e+04 train accuracy: 0.298204 val accuracy: 0.298000\n",
      "lr 2.263158e-07 reg 4.210526e+04 train accuracy: 0.297429 val accuracy: 0.300000\n",
      "lr 2.263158e-07 reg 4.342105e+04 train accuracy: 0.293122 val accuracy: 0.302000\n",
      "lr 2.263158e-07 reg 4.473684e+04 train accuracy: 0.294898 val accuracy: 0.317000\n",
      "lr 2.263158e-07 reg 4.605263e+04 train accuracy: 0.295918 val accuracy: 0.287000\n",
      "lr 2.263158e-07 reg 4.736842e+04 train accuracy: 0.294327 val accuracy: 0.316000\n",
      "lr 2.263158e-07 reg 4.868421e+04 train accuracy: 0.298429 val accuracy: 0.310000\n",
      "lr 2.263158e-07 reg 5.000000e+04 train accuracy: 0.297184 val accuracy: 0.288000\n",
      "lr 2.473684e-07 reg 2.500000e+04 train accuracy: 0.300592 val accuracy: 0.280000\n",
      "lr 2.473684e-07 reg 2.631579e+04 train accuracy: 0.305265 val accuracy: 0.307000\n",
      "lr 2.473684e-07 reg 2.763158e+04 train accuracy: 0.302857 val accuracy: 0.305000\n",
      "lr 2.473684e-07 reg 2.894737e+04 train accuracy: 0.303449 val accuracy: 0.323000\n",
      "lr 2.473684e-07 reg 3.026316e+04 train accuracy: 0.303510 val accuracy: 0.305000\n",
      "lr 2.473684e-07 reg 3.157895e+04 train accuracy: 0.300714 val accuracy: 0.288000\n",
      "lr 2.473684e-07 reg 3.289474e+04 train accuracy: 0.304816 val accuracy: 0.293000\n",
      "lr 2.473684e-07 reg 3.421053e+04 train accuracy: 0.297000 val accuracy: 0.315000\n",
      "lr 2.473684e-07 reg 3.552632e+04 train accuracy: 0.298857 val accuracy: 0.286000\n",
      "lr 2.473684e-07 reg 3.684211e+04 train accuracy: 0.300102 val accuracy: 0.292000\n",
      "lr 2.473684e-07 reg 3.815789e+04 train accuracy: 0.301306 val accuracy: 0.321000\n",
      "lr 2.473684e-07 reg 3.947368e+04 train accuracy: 0.302082 val accuracy: 0.284000\n",
      "lr 2.473684e-07 reg 4.078947e+04 train accuracy: 0.300959 val accuracy: 0.296000\n",
      "lr 2.473684e-07 reg 4.210526e+04 train accuracy: 0.299776 val accuracy: 0.300000\n",
      "lr 2.473684e-07 reg 4.342105e+04 train accuracy: 0.298327 val accuracy: 0.282000\n",
      "lr 2.473684e-07 reg 4.473684e+04 train accuracy: 0.299184 val accuracy: 0.286000\n",
      "lr 2.473684e-07 reg 4.605263e+04 train accuracy: 0.301327 val accuracy: 0.284000\n",
      "lr 2.473684e-07 reg 4.736842e+04 train accuracy: 0.303265 val accuracy: 0.317000\n",
      "lr 2.473684e-07 reg 4.868421e+04 train accuracy: 0.300653 val accuracy: 0.312000\n",
      "lr 2.473684e-07 reg 5.000000e+04 train accuracy: 0.296000 val accuracy: 0.312000\n",
      "lr 2.684211e-07 reg 2.500000e+04 train accuracy: 0.297857 val accuracy: 0.290000\n",
      "lr 2.684211e-07 reg 2.631579e+04 train accuracy: 0.300367 val accuracy: 0.286000\n",
      "lr 2.684211e-07 reg 2.763158e+04 train accuracy: 0.303000 val accuracy: 0.302000\n",
      "lr 2.684211e-07 reg 2.894737e+04 train accuracy: 0.300776 val accuracy: 0.291000\n",
      "lr 2.684211e-07 reg 3.026316e+04 train accuracy: 0.309571 val accuracy: 0.313000\n",
      "lr 2.684211e-07 reg 3.157895e+04 train accuracy: 0.305714 val accuracy: 0.292000\n",
      "lr 2.684211e-07 reg 3.289474e+04 train accuracy: 0.303163 val accuracy: 0.279000\n",
      "lr 2.684211e-07 reg 3.421053e+04 train accuracy: 0.305102 val accuracy: 0.327000\n",
      "lr 2.684211e-07 reg 3.552632e+04 train accuracy: 0.307388 val accuracy: 0.297000\n",
      "lr 2.684211e-07 reg 3.684211e+04 train accuracy: 0.308837 val accuracy: 0.297000\n",
      "lr 2.684211e-07 reg 3.815789e+04 train accuracy: 0.301959 val accuracy: 0.306000\n",
      "lr 2.684211e-07 reg 3.947368e+04 train accuracy: 0.304571 val accuracy: 0.304000\n",
      "lr 2.684211e-07 reg 4.078947e+04 train accuracy: 0.299408 val accuracy: 0.303000\n",
      "lr 2.684211e-07 reg 4.210526e+04 train accuracy: 0.302612 val accuracy: 0.310000\n",
      "lr 2.684211e-07 reg 4.342105e+04 train accuracy: 0.307122 val accuracy: 0.313000\n",
      "lr 2.684211e-07 reg 4.473684e+04 train accuracy: 0.299000 val accuracy: 0.288000\n",
      "lr 2.684211e-07 reg 4.605263e+04 train accuracy: 0.304755 val accuracy: 0.308000\n",
      "lr 2.684211e-07 reg 4.736842e+04 train accuracy: 0.303878 val accuracy: 0.288000\n",
      "lr 2.684211e-07 reg 4.868421e+04 train accuracy: 0.301388 val accuracy: 0.294000\n",
      "lr 2.684211e-07 reg 5.000000e+04 train accuracy: 0.308286 val accuracy: 0.305000\n",
      "lr 2.894737e-07 reg 2.500000e+04 train accuracy: 0.305490 val accuracy: 0.309000\n",
      "lr 2.894737e-07 reg 2.631579e+04 train accuracy: 0.302673 val accuracy: 0.291000\n",
      "lr 2.894737e-07 reg 2.763158e+04 train accuracy: 0.304245 val accuracy: 0.306000\n",
      "lr 2.894737e-07 reg 2.894737e+04 train accuracy: 0.305388 val accuracy: 0.310000\n",
      "lr 2.894737e-07 reg 3.026316e+04 train accuracy: 0.307510 val accuracy: 0.308000\n",
      "lr 2.894737e-07 reg 3.157895e+04 train accuracy: 0.309551 val accuracy: 0.316000\n",
      "lr 2.894737e-07 reg 3.289474e+04 train accuracy: 0.306837 val accuracy: 0.315000\n",
      "lr 2.894737e-07 reg 3.421053e+04 train accuracy: 0.311000 val accuracy: 0.346000\n",
      "lr 2.894737e-07 reg 3.552632e+04 train accuracy: 0.302286 val accuracy: 0.299000\n",
      "lr 2.894737e-07 reg 3.684211e+04 train accuracy: 0.306694 val accuracy: 0.295000\n",
      "lr 2.894737e-07 reg 3.815789e+04 train accuracy: 0.302020 val accuracy: 0.299000\n",
      "lr 2.894737e-07 reg 3.947368e+04 train accuracy: 0.305122 val accuracy: 0.311000\n",
      "lr 2.894737e-07 reg 4.078947e+04 train accuracy: 0.308694 val accuracy: 0.312000\n",
      "lr 2.894737e-07 reg 4.210526e+04 train accuracy: 0.310551 val accuracy: 0.319000\n",
      "lr 2.894737e-07 reg 4.342105e+04 train accuracy: 0.310673 val accuracy: 0.308000\n",
      "lr 2.894737e-07 reg 4.473684e+04 train accuracy: 0.306163 val accuracy: 0.308000\n",
      "lr 2.894737e-07 reg 4.605263e+04 train accuracy: 0.305286 val accuracy: 0.304000\n",
      "lr 2.894737e-07 reg 4.736842e+04 train accuracy: 0.305551 val accuracy: 0.324000\n",
      "lr 2.894737e-07 reg 4.868421e+04 train accuracy: 0.303633 val accuracy: 0.317000\n",
      "lr 2.894737e-07 reg 5.000000e+04 train accuracy: 0.306286 val accuracy: 0.308000\n",
      "lr 3.105263e-07 reg 2.500000e+04 train accuracy: 0.309510 val accuracy: 0.319000\n",
      "lr 3.105263e-07 reg 2.631579e+04 train accuracy: 0.309163 val accuracy: 0.303000\n",
      "lr 3.105263e-07 reg 2.763158e+04 train accuracy: 0.305653 val accuracy: 0.317000\n",
      "lr 3.105263e-07 reg 2.894737e+04 train accuracy: 0.308857 val accuracy: 0.307000\n",
      "lr 3.105263e-07 reg 3.026316e+04 train accuracy: 0.307510 val accuracy: 0.310000\n",
      "lr 3.105263e-07 reg 3.157895e+04 train accuracy: 0.305857 val accuracy: 0.315000\n",
      "lr 3.105263e-07 reg 3.289474e+04 train accuracy: 0.310469 val accuracy: 0.313000\n",
      "lr 3.105263e-07 reg 3.421053e+04 train accuracy: 0.309245 val accuracy: 0.314000\n",
      "lr 3.105263e-07 reg 3.552632e+04 train accuracy: 0.308633 val accuracy: 0.308000\n",
      "lr 3.105263e-07 reg 3.684211e+04 train accuracy: 0.311612 val accuracy: 0.314000\n",
      "lr 3.105263e-07 reg 3.815789e+04 train accuracy: 0.316143 val accuracy: 0.302000\n",
      "lr 3.105263e-07 reg 3.947368e+04 train accuracy: 0.309490 val accuracy: 0.300000\n",
      "lr 3.105263e-07 reg 4.078947e+04 train accuracy: 0.309122 val accuracy: 0.322000\n",
      "lr 3.105263e-07 reg 4.210526e+04 train accuracy: 0.309143 val accuracy: 0.313000\n",
      "lr 3.105263e-07 reg 4.342105e+04 train accuracy: 0.309286 val accuracy: 0.318000\n",
      "lr 3.105263e-07 reg 4.473684e+04 train accuracy: 0.312204 val accuracy: 0.303000\n",
      "lr 3.105263e-07 reg 4.605263e+04 train accuracy: 0.306102 val accuracy: 0.322000\n",
      "lr 3.105263e-07 reg 4.736842e+04 train accuracy: 0.311265 val accuracy: 0.334000\n",
      "lr 3.105263e-07 reg 4.868421e+04 train accuracy: 0.309408 val accuracy: 0.310000\n",
      "lr 3.105263e-07 reg 5.000000e+04 train accuracy: 0.308776 val accuracy: 0.312000\n",
      "lr 3.315789e-07 reg 2.500000e+04 train accuracy: 0.312837 val accuracy: 0.306000\n",
      "lr 3.315789e-07 reg 2.631579e+04 train accuracy: 0.314122 val accuracy: 0.321000\n",
      "lr 3.315789e-07 reg 2.763158e+04 train accuracy: 0.313551 val accuracy: 0.310000\n",
      "lr 3.315789e-07 reg 2.894737e+04 train accuracy: 0.313367 val accuracy: 0.312000\n",
      "lr 3.315789e-07 reg 3.026316e+04 train accuracy: 0.311673 val accuracy: 0.313000\n",
      "lr 3.315789e-07 reg 3.157895e+04 train accuracy: 0.312204 val accuracy: 0.296000\n",
      "lr 3.315789e-07 reg 3.289474e+04 train accuracy: 0.314898 val accuracy: 0.310000\n",
      "lr 3.315789e-07 reg 3.421053e+04 train accuracy: 0.311204 val accuracy: 0.306000\n",
      "lr 3.315789e-07 reg 3.552632e+04 train accuracy: 0.310837 val accuracy: 0.306000\n",
      "lr 3.315789e-07 reg 3.684211e+04 train accuracy: 0.309204 val accuracy: 0.298000\n",
      "lr 3.315789e-07 reg 3.815789e+04 train accuracy: 0.317122 val accuracy: 0.312000\n",
      "lr 3.315789e-07 reg 3.947368e+04 train accuracy: 0.307592 val accuracy: 0.317000\n",
      "lr 3.315789e-07 reg 4.078947e+04 train accuracy: 0.307490 val accuracy: 0.291000\n",
      "lr 3.315789e-07 reg 4.210526e+04 train accuracy: 0.316306 val accuracy: 0.291000\n",
      "lr 3.315789e-07 reg 4.342105e+04 train accuracy: 0.310898 val accuracy: 0.313000\n",
      "lr 3.315789e-07 reg 4.473684e+04 train accuracy: 0.310163 val accuracy: 0.304000\n",
      "lr 3.315789e-07 reg 4.605263e+04 train accuracy: 0.317429 val accuracy: 0.302000\n",
      "lr 3.315789e-07 reg 4.736842e+04 train accuracy: 0.309082 val accuracy: 0.299000\n",
      "lr 3.315789e-07 reg 4.868421e+04 train accuracy: 0.311204 val accuracy: 0.305000\n",
      "lr 3.315789e-07 reg 5.000000e+04 train accuracy: 0.311571 val accuracy: 0.311000\n",
      "lr 3.526316e-07 reg 2.500000e+04 train accuracy: 0.315653 val accuracy: 0.327000\n",
      "lr 3.526316e-07 reg 2.631579e+04 train accuracy: 0.315816 val accuracy: 0.333000\n",
      "lr 3.526316e-07 reg 2.763158e+04 train accuracy: 0.315735 val accuracy: 0.325000\n",
      "lr 3.526316e-07 reg 2.894737e+04 train accuracy: 0.315184 val accuracy: 0.308000\n",
      "lr 3.526316e-07 reg 3.026316e+04 train accuracy: 0.313918 val accuracy: 0.307000\n",
      "lr 3.526316e-07 reg 3.157895e+04 train accuracy: 0.315286 val accuracy: 0.289000\n",
      "lr 3.526316e-07 reg 3.289474e+04 train accuracy: 0.317204 val accuracy: 0.334000\n",
      "lr 3.526316e-07 reg 3.421053e+04 train accuracy: 0.315245 val accuracy: 0.308000\n",
      "lr 3.526316e-07 reg 3.552632e+04 train accuracy: 0.316245 val accuracy: 0.307000\n",
      "lr 3.526316e-07 reg 3.684211e+04 train accuracy: 0.316265 val accuracy: 0.318000\n",
      "lr 3.526316e-07 reg 3.815789e+04 train accuracy: 0.310224 val accuracy: 0.314000\n",
      "lr 3.526316e-07 reg 3.947368e+04 train accuracy: 0.312061 val accuracy: 0.322000\n",
      "lr 3.526316e-07 reg 4.078947e+04 train accuracy: 0.315673 val accuracy: 0.299000\n",
      "lr 3.526316e-07 reg 4.210526e+04 train accuracy: 0.313898 val accuracy: 0.292000\n",
      "lr 3.526316e-07 reg 4.342105e+04 train accuracy: 0.315469 val accuracy: 0.319000\n",
      "lr 3.526316e-07 reg 4.473684e+04 train accuracy: 0.312204 val accuracy: 0.328000\n",
      "lr 3.526316e-07 reg 4.605263e+04 train accuracy: 0.309694 val accuracy: 0.311000\n",
      "lr 3.526316e-07 reg 4.736842e+04 train accuracy: 0.317306 val accuracy: 0.338000\n",
      "lr 3.526316e-07 reg 4.868421e+04 train accuracy: 0.313857 val accuracy: 0.305000\n",
      "lr 3.526316e-07 reg 5.000000e+04 train accuracy: 0.319327 val accuracy: 0.315000\n",
      "lr 3.736842e-07 reg 2.500000e+04 train accuracy: 0.317857 val accuracy: 0.322000\n",
      "lr 3.736842e-07 reg 2.631579e+04 train accuracy: 0.319714 val accuracy: 0.324000\n",
      "lr 3.736842e-07 reg 2.763158e+04 train accuracy: 0.318061 val accuracy: 0.316000\n",
      "lr 3.736842e-07 reg 2.894737e+04 train accuracy: 0.321306 val accuracy: 0.311000\n",
      "lr 3.736842e-07 reg 3.026316e+04 train accuracy: 0.317490 val accuracy: 0.300000\n",
      "lr 3.736842e-07 reg 3.157895e+04 train accuracy: 0.320184 val accuracy: 0.316000\n",
      "lr 3.736842e-07 reg 3.289474e+04 train accuracy: 0.316102 val accuracy: 0.309000\n",
      "lr 3.736842e-07 reg 3.421053e+04 train accuracy: 0.317714 val accuracy: 0.319000\n",
      "lr 3.736842e-07 reg 3.552632e+04 train accuracy: 0.320449 val accuracy: 0.333000\n",
      "lr 3.736842e-07 reg 3.684211e+04 train accuracy: 0.319939 val accuracy: 0.311000\n",
      "lr 3.736842e-07 reg 3.815789e+04 train accuracy: 0.321122 val accuracy: 0.296000\n",
      "lr 3.736842e-07 reg 3.947368e+04 train accuracy: 0.320714 val accuracy: 0.303000\n",
      "lr 3.736842e-07 reg 4.078947e+04 train accuracy: 0.311918 val accuracy: 0.312000\n",
      "lr 3.736842e-07 reg 4.210526e+04 train accuracy: 0.319265 val accuracy: 0.317000\n",
      "lr 3.736842e-07 reg 4.342105e+04 train accuracy: 0.320918 val accuracy: 0.322000\n",
      "lr 3.736842e-07 reg 4.473684e+04 train accuracy: 0.323143 val accuracy: 0.320000\n",
      "lr 3.736842e-07 reg 4.605263e+04 train accuracy: 0.316122 val accuracy: 0.308000\n",
      "lr 3.736842e-07 reg 4.736842e+04 train accuracy: 0.314000 val accuracy: 0.320000\n",
      "lr 3.736842e-07 reg 4.868421e+04 train accuracy: 0.315673 val accuracy: 0.321000\n",
      "lr 3.736842e-07 reg 5.000000e+04 train accuracy: 0.313184 val accuracy: 0.325000\n",
      "lr 3.947368e-07 reg 2.500000e+04 train accuracy: 0.317306 val accuracy: 0.314000\n",
      "lr 3.947368e-07 reg 2.631579e+04 train accuracy: 0.322143 val accuracy: 0.315000\n",
      "lr 3.947368e-07 reg 2.763158e+04 train accuracy: 0.323327 val accuracy: 0.337000\n",
      "lr 3.947368e-07 reg 2.894737e+04 train accuracy: 0.318694 val accuracy: 0.313000\n",
      "lr 3.947368e-07 reg 3.026316e+04 train accuracy: 0.323490 val accuracy: 0.351000\n",
      "lr 3.947368e-07 reg 3.157895e+04 train accuracy: 0.316102 val accuracy: 0.312000\n",
      "lr 3.947368e-07 reg 3.289474e+04 train accuracy: 0.325204 val accuracy: 0.333000\n",
      "lr 3.947368e-07 reg 3.421053e+04 train accuracy: 0.319429 val accuracy: 0.315000\n",
      "lr 3.947368e-07 reg 3.552632e+04 train accuracy: 0.323694 val accuracy: 0.322000\n",
      "lr 3.947368e-07 reg 3.684211e+04 train accuracy: 0.317898 val accuracy: 0.309000\n",
      "lr 3.947368e-07 reg 3.815789e+04 train accuracy: 0.321898 val accuracy: 0.325000\n",
      "lr 3.947368e-07 reg 3.947368e+04 train accuracy: 0.322510 val accuracy: 0.322000\n",
      "lr 3.947368e-07 reg 4.078947e+04 train accuracy: 0.323755 val accuracy: 0.326000\n",
      "lr 3.947368e-07 reg 4.210526e+04 train accuracy: 0.320490 val accuracy: 0.320000\n",
      "lr 3.947368e-07 reg 4.342105e+04 train accuracy: 0.320551 val accuracy: 0.329000\n",
      "lr 3.947368e-07 reg 4.473684e+04 train accuracy: 0.319837 val accuracy: 0.311000\n",
      "lr 3.947368e-07 reg 4.605263e+04 train accuracy: 0.320000 val accuracy: 0.307000\n",
      "lr 3.947368e-07 reg 4.736842e+04 train accuracy: 0.321469 val accuracy: 0.308000\n",
      "lr 3.947368e-07 reg 4.868421e+04 train accuracy: 0.316898 val accuracy: 0.304000\n",
      "lr 3.947368e-07 reg 5.000000e+04 train accuracy: 0.319837 val accuracy: 0.311000\n",
      "lr 4.157895e-07 reg 2.500000e+04 train accuracy: 0.318612 val accuracy: 0.305000\n",
      "lr 4.157895e-07 reg 2.631579e+04 train accuracy: 0.316122 val accuracy: 0.307000\n",
      "lr 4.157895e-07 reg 2.763158e+04 train accuracy: 0.324102 val accuracy: 0.336000\n",
      "lr 4.157895e-07 reg 2.894737e+04 train accuracy: 0.323980 val accuracy: 0.319000\n",
      "lr 4.157895e-07 reg 3.026316e+04 train accuracy: 0.326245 val accuracy: 0.322000\n",
      "lr 4.157895e-07 reg 3.157895e+04 train accuracy: 0.325327 val accuracy: 0.331000\n",
      "lr 4.157895e-07 reg 3.289474e+04 train accuracy: 0.327327 val accuracy: 0.327000\n",
      "lr 4.157895e-07 reg 3.421053e+04 train accuracy: 0.322776 val accuracy: 0.319000\n",
      "lr 4.157895e-07 reg 3.552632e+04 train accuracy: 0.321020 val accuracy: 0.310000\n",
      "lr 4.157895e-07 reg 3.684211e+04 train accuracy: 0.322408 val accuracy: 0.303000\n",
      "lr 4.157895e-07 reg 3.815789e+04 train accuracy: 0.321490 val accuracy: 0.305000\n",
      "lr 4.157895e-07 reg 3.947368e+04 train accuracy: 0.317796 val accuracy: 0.322000\n",
      "lr 4.157895e-07 reg 4.078947e+04 train accuracy: 0.324918 val accuracy: 0.324000\n",
      "lr 4.157895e-07 reg 4.210526e+04 train accuracy: 0.324918 val accuracy: 0.343000\n",
      "lr 4.157895e-07 reg 4.342105e+04 train accuracy: 0.322959 val accuracy: 0.319000\n",
      "lr 4.157895e-07 reg 4.473684e+04 train accuracy: 0.324612 val accuracy: 0.319000\n",
      "lr 4.157895e-07 reg 4.605263e+04 train accuracy: 0.323694 val accuracy: 0.324000\n",
      "lr 4.157895e-07 reg 4.736842e+04 train accuracy: 0.318041 val accuracy: 0.338000\n",
      "lr 4.157895e-07 reg 4.868421e+04 train accuracy: 0.320633 val accuracy: 0.324000\n",
      "lr 4.157895e-07 reg 5.000000e+04 train accuracy: 0.324510 val accuracy: 0.319000\n",
      "lr 4.368421e-07 reg 2.500000e+04 train accuracy: 0.324082 val accuracy: 0.330000\n",
      "lr 4.368421e-07 reg 2.631579e+04 train accuracy: 0.332265 val accuracy: 0.315000\n",
      "lr 4.368421e-07 reg 2.763158e+04 train accuracy: 0.322735 val accuracy: 0.327000\n",
      "lr 4.368421e-07 reg 2.894737e+04 train accuracy: 0.327571 val accuracy: 0.315000\n",
      "lr 4.368421e-07 reg 3.026316e+04 train accuracy: 0.327714 val accuracy: 0.324000\n",
      "lr 4.368421e-07 reg 3.157895e+04 train accuracy: 0.329041 val accuracy: 0.334000\n",
      "lr 4.368421e-07 reg 3.289474e+04 train accuracy: 0.323184 val accuracy: 0.313000\n",
      "lr 4.368421e-07 reg 3.421053e+04 train accuracy: 0.326551 val accuracy: 0.306000\n",
      "lr 4.368421e-07 reg 3.552632e+04 train accuracy: 0.323327 val accuracy: 0.328000\n",
      "lr 4.368421e-07 reg 3.684211e+04 train accuracy: 0.325041 val accuracy: 0.344000\n",
      "lr 4.368421e-07 reg 3.815789e+04 train accuracy: 0.326408 val accuracy: 0.288000\n",
      "lr 4.368421e-07 reg 3.947368e+04 train accuracy: 0.325796 val accuracy: 0.327000\n",
      "lr 4.368421e-07 reg 4.078947e+04 train accuracy: 0.323796 val accuracy: 0.345000\n",
      "lr 4.368421e-07 reg 4.210526e+04 train accuracy: 0.326449 val accuracy: 0.321000\n",
      "lr 4.368421e-07 reg 4.342105e+04 train accuracy: 0.330673 val accuracy: 0.334000\n",
      "lr 4.368421e-07 reg 4.473684e+04 train accuracy: 0.322327 val accuracy: 0.333000\n",
      "lr 4.368421e-07 reg 4.605263e+04 train accuracy: 0.325449 val accuracy: 0.316000\n",
      "lr 4.368421e-07 reg 4.736842e+04 train accuracy: 0.326469 val accuracy: 0.313000\n",
      "lr 4.368421e-07 reg 4.868421e+04 train accuracy: 0.322367 val accuracy: 0.311000\n",
      "lr 4.368421e-07 reg 5.000000e+04 train accuracy: 0.324102 val accuracy: 0.297000\n",
      "lr 4.578947e-07 reg 2.500000e+04 train accuracy: 0.326898 val accuracy: 0.340000\n",
      "lr 4.578947e-07 reg 2.631579e+04 train accuracy: 0.322000 val accuracy: 0.299000\n",
      "lr 4.578947e-07 reg 2.763158e+04 train accuracy: 0.322224 val accuracy: 0.322000\n",
      "lr 4.578947e-07 reg 2.894737e+04 train accuracy: 0.328633 val accuracy: 0.339000\n",
      "lr 4.578947e-07 reg 3.026316e+04 train accuracy: 0.330143 val accuracy: 0.309000\n",
      "lr 4.578947e-07 reg 3.157895e+04 train accuracy: 0.324306 val accuracy: 0.323000\n",
      "lr 4.578947e-07 reg 3.289474e+04 train accuracy: 0.325612 val accuracy: 0.321000\n",
      "lr 4.578947e-07 reg 3.421053e+04 train accuracy: 0.326143 val accuracy: 0.335000\n",
      "lr 4.578947e-07 reg 3.552632e+04 train accuracy: 0.322633 val accuracy: 0.323000\n",
      "lr 4.578947e-07 reg 3.684211e+04 train accuracy: 0.325776 val accuracy: 0.327000\n",
      "lr 4.578947e-07 reg 3.815789e+04 train accuracy: 0.328551 val accuracy: 0.325000\n",
      "lr 4.578947e-07 reg 3.947368e+04 train accuracy: 0.327327 val accuracy: 0.328000\n",
      "lr 4.578947e-07 reg 4.078947e+04 train accuracy: 0.325714 val accuracy: 0.310000\n",
      "lr 4.578947e-07 reg 4.210526e+04 train accuracy: 0.328571 val accuracy: 0.315000\n",
      "lr 4.578947e-07 reg 4.342105e+04 train accuracy: 0.328102 val accuracy: 0.326000\n",
      "lr 4.578947e-07 reg 4.473684e+04 train accuracy: 0.325878 val accuracy: 0.325000\n",
      "lr 4.578947e-07 reg 4.605263e+04 train accuracy: 0.327041 val accuracy: 0.326000\n",
      "lr 4.578947e-07 reg 4.736842e+04 train accuracy: 0.323347 val accuracy: 0.297000\n",
      "lr 4.578947e-07 reg 4.868421e+04 train accuracy: 0.326939 val accuracy: 0.307000\n",
      "lr 4.578947e-07 reg 5.000000e+04 train accuracy: 0.322286 val accuracy: 0.334000\n",
      "lr 4.789474e-07 reg 2.500000e+04 train accuracy: 0.330327 val accuracy: 0.334000\n",
      "lr 4.789474e-07 reg 2.631579e+04 train accuracy: 0.324735 val accuracy: 0.338000\n",
      "lr 4.789474e-07 reg 2.763158e+04 train accuracy: 0.331510 val accuracy: 0.305000\n",
      "lr 4.789474e-07 reg 2.894737e+04 train accuracy: 0.327551 val accuracy: 0.327000\n",
      "lr 4.789474e-07 reg 3.026316e+04 train accuracy: 0.324653 val accuracy: 0.325000\n",
      "lr 4.789474e-07 reg 3.157895e+04 train accuracy: 0.332510 val accuracy: 0.335000\n",
      "lr 4.789474e-07 reg 3.289474e+04 train accuracy: 0.330469 val accuracy: 0.307000\n",
      "lr 4.789474e-07 reg 3.421053e+04 train accuracy: 0.334878 val accuracy: 0.347000\n",
      "lr 4.789474e-07 reg 3.552632e+04 train accuracy: 0.324755 val accuracy: 0.314000\n",
      "lr 4.789474e-07 reg 3.684211e+04 train accuracy: 0.330551 val accuracy: 0.338000\n",
      "lr 4.789474e-07 reg 3.815789e+04 train accuracy: 0.322918 val accuracy: 0.298000\n",
      "lr 4.789474e-07 reg 3.947368e+04 train accuracy: 0.328490 val accuracy: 0.319000\n",
      "lr 4.789474e-07 reg 4.078947e+04 train accuracy: 0.328163 val accuracy: 0.343000\n",
      "lr 4.789474e-07 reg 4.210526e+04 train accuracy: 0.328122 val accuracy: 0.337000\n",
      "lr 4.789474e-07 reg 4.342105e+04 train accuracy: 0.329122 val accuracy: 0.337000\n",
      "lr 4.789474e-07 reg 4.473684e+04 train accuracy: 0.329694 val accuracy: 0.315000\n",
      "lr 4.789474e-07 reg 4.605263e+04 train accuracy: 0.329673 val accuracy: 0.308000\n",
      "lr 4.789474e-07 reg 4.736842e+04 train accuracy: 0.327204 val accuracy: 0.325000\n",
      "lr 4.789474e-07 reg 4.868421e+04 train accuracy: 0.327837 val accuracy: 0.343000\n",
      "lr 4.789474e-07 reg 5.000000e+04 train accuracy: 0.329388 val accuracy: 0.326000\n",
      "lr 5.000000e-07 reg 2.500000e+04 train accuracy: 0.327673 val accuracy: 0.302000\n",
      "lr 5.000000e-07 reg 2.631579e+04 train accuracy: 0.329980 val accuracy: 0.320000\n",
      "lr 5.000000e-07 reg 2.763158e+04 train accuracy: 0.327510 val accuracy: 0.322000\n",
      "lr 5.000000e-07 reg 2.894737e+04 train accuracy: 0.327367 val accuracy: 0.314000\n",
      "lr 5.000000e-07 reg 3.026316e+04 train accuracy: 0.332837 val accuracy: 0.304000\n",
      "lr 5.000000e-07 reg 3.157895e+04 train accuracy: 0.329082 val accuracy: 0.323000\n",
      "lr 5.000000e-07 reg 3.289474e+04 train accuracy: 0.327878 val accuracy: 0.328000\n",
      "lr 5.000000e-07 reg 3.421053e+04 train accuracy: 0.327939 val accuracy: 0.352000\n",
      "lr 5.000000e-07 reg 3.552632e+04 train accuracy: 0.329020 val accuracy: 0.345000\n",
      "lr 5.000000e-07 reg 3.684211e+04 train accuracy: 0.330163 val accuracy: 0.340000\n",
      "lr 5.000000e-07 reg 3.815789e+04 train accuracy: 0.331143 val accuracy: 0.340000\n",
      "lr 5.000000e-07 reg 3.947368e+04 train accuracy: 0.336265 val accuracy: 0.341000\n",
      "lr 5.000000e-07 reg 4.078947e+04 train accuracy: 0.331082 val accuracy: 0.335000\n",
      "lr 5.000000e-07 reg 4.210526e+04 train accuracy: 0.328612 val accuracy: 0.326000\n",
      "lr 5.000000e-07 reg 4.342105e+04 train accuracy: 0.326918 val accuracy: 0.337000\n",
      "lr 5.000000e-07 reg 4.473684e+04 train accuracy: 0.331837 val accuracy: 0.328000\n",
      "lr 5.000000e-07 reg 4.605263e+04 train accuracy: 0.330796 val accuracy: 0.330000\n",
      "lr 5.000000e-07 reg 4.736842e+04 train accuracy: 0.334755 val accuracy: 0.337000\n",
      "lr 5.000000e-07 reg 4.868421e+04 train accuracy: 0.331551 val accuracy: 0.334000\n",
      "lr 5.000000e-07 reg 5.000000e+04 train accuracy: 0.329551 val accuracy: 0.328000\n",
      "best validation accuracy achieved during cross-validation: 0.352000\n"
     ]
    }
   ],
   "source": [
    "# Use the validation set to tune hyperparameters (regularization strength and\n",
    "# learning rate). You should experiment with different ranges for the learning\n",
    "# rates and regularization strengths; if you are careful you should be able to\n",
    "# get a classification accuracy of over 0.35 on the validation set.\n",
    "\n",
    "from cs231n.classifiers import Softmax\n",
    "results = {}\n",
    "best_val = -1\n",
    "best_softmax = None\n",
    "\n",
    "################################################################################\n",
    "# TODO:                                                                        #\n",
    "# Use the validation set to set the learning rate and regularization strength. #\n",
    "# This should be identical to the validation that you did for the SVM; save    #\n",
    "# the best trained softmax classifer in best_softmax.                          #\n",
    "################################################################################\n",
    "\n",
    "# Provided as a reference. You may or may not want to change these hyperparameters\n",
    "learning_rates = [1e-7, 5e-7]\n",
    "regularization_strengths = [2.5e4, 5e4]\n",
    "\n",
    "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n",
    "\n",
    "lr_rates = np.linspace(1e-7, 5e-6,30)\n",
    "regs = np.linspace(2.5e3, 6e4 ,30)\n",
    "best_val=0\n",
    "num_iters = 2000\n",
    "for lr in lr_rates:\n",
    "    for reg in regs:\n",
    "        print\n",
    "        sm = Softmax()\n",
    "        loss_hist = sm.train(X_train,y_train,learning_rate=lr,reg=reg,num_iters=num_iters,verbose=False)\n",
    "        \n",
    "        y_train_pred = sm.predict(X_train)\n",
    "        train_acc = np.mean(y_train_pred==y_train)\n",
    "        y_val_pred = sm.predict(X_val)\n",
    "        val_acc = np.mean(y_val_pred==y_val)\n",
    "        \n",
    "        if best_val < val_acc:\n",
    "            best_val = val_acc\n",
    "            best_softmax = sm\n",
    "            \n",
    "        results[(lr,reg)]=train_acc,val_acc\n",
    "\n",
    "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n",
    "    \n",
    "# Print out results.\n",
    "for lr, reg in sorted(results):\n",
    "    train_accuracy, val_accuracy = results[(lr, reg)]\n",
    "    print('lr %e reg %e train accuracy: %f val accuracy: %f' % (\n",
    "                lr, reg, train_accuracy, val_accuracy))\n",
    "    \n",
    "print('best validation accuracy achieved during cross-validation: %f' % best_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "id": "test"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "softmax on raw pixels final test set accuracy: 0.316000\n"
     ]
    }
   ],
   "source": [
    "# evaluate on test set\n",
    "# Evaluate the best softmax on test set\n",
    "y_test_pred = best_softmax.predict(X_test)\n",
    "test_accuracy = np.mean(y_test == y_test_pred)\n",
    "print('softmax on raw pixels final test set accuracy: %f' % (test_accuracy, ))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "pdf-inline"
    ]
   },
   "source": [
    "**Inline Question 2** - *True or False*\n",
    "\n",
    "Suppose the overall training loss is defined as the sum of the per-datapoint loss over all training examples. It is possible to add a new datapoint to a training set that would leave the SVM loss unchanged, but this is not the case with the Softmax classifier loss.\n",
    "\n",
    "$\\color{blue}{\\textit Your Answer:}$\n",
    "\n",
    "\n",
    "$\\color{blue}{\\textit Your Explanation:}$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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hE8NWXdzaz5i4rc8KVa3LJbihpPVjJeMGLI0HZ3MKa/4Mrf/aynLIW54iD7c2MX9akjnmRJXj/UcFmzfS2urLAQ+8cwDb5/ivo8E0qc2TGNXdczx7AvIotDiXAJjPHiYwonX95Il/C8OrOB7xrD8X2nG2s3rJIvvzL3M1/lnGRMxaZxn1gS2lYjIsUrst+Yq9gWczmWchj3D2Am6B9ty3xvYnkfiKVoa3MH1xETQlwdn6XdjKSyviGlvMHFsGksELu3Dql9TwL14N1ThURRFURTF5dEXHkVRFEVRXB7L6XT+5k8piqIoiqJ8iFGFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF59IVHURRFURSXR194FEVRFEVxefSFR1EURVEUl0dfeBRFURRFcXn0hUdRFEVRFJdHX3gURVEURXF5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\n",
      "text/plain": [
       "<Figure size 720x576 with 10 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualize the learned weights for each class\n",
    "w = best_softmax.W[:-1,:] # strip out the bias\n",
    "w = w.reshape(32, 32, 3, 10)\n",
    "\n",
    "w_min, w_max = np.min(w), np.max(w)\n",
    "\n",
    "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n",
    "for i in range(10):\n",
    "    plt.subplot(2, 5, i + 1)\n",
    "    \n",
    "    # Rescale the weights to be between 0 and 255\n",
    "    wimg = 255.0 * (w[:, :, :, i].squeeze() - w_min) / (w_max - w_min)\n",
    "    plt.imshow(wimg.astype('uint8'))\n",
    "    plt.axis('off')\n",
    "    plt.title(classes[i])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
